const path = require('path')
const TerserPlugin = require('terser-webpack-plugin')
const webpack = require('webpack')
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
// const SentryWebpackPlugin = require('@sentry/webpack-plugin')
function resolve (dir) {
  return path.join(__dirname, dir)
}
// 为了节约编译的时间，我们需要告诉webpack公共文件已经编译好了，减少webpack对公共库的编译时间
const dllReference = (config) => {
  config.plugin('vendorDll')
    // 这个插件把只有 dll 的 bundle(们)(dll-only-bundle(s)) 引用到需要的预编译的依赖
    // 通过引用 dll 的 manifest 文件来把依赖的名称映射到模块的 id 上，之后再在需要的时候通过内置的 __webpack_require__ 函数来 require 他们
    .use(webpack.DllReferencePlugin, [{
      context: process.cwd(),
      manifest: require('./public/vendor/vendor-manifest.json')
    }])
  // 自动引入生成的 dll 文件
  config.plugin('addAssetHtml')
    // 将 dll 注入到 生成的 html 模板中
    .use(AddAssetHtmlPlugin, [
      [
        {
          // dll文件位置
          filepath: path.resolve(__dirname, './public/vendor/*.js'),
          // dll 引用路径
          publicPath: '/vendor',
          // dll最终输出的目录
          outputPath: '/vendor'
        }
      ]
    ])
    .after('html')
}
console.log(process.env.npm_package_config_entry)
let array = ['^/action', '^/index/action', '^/report', '^/public', '^/uba/service', '^/auth/service', '^/importAction', '^/fileUpload', '^/kmUpload', '^/action2bill']
let proxyObj = {}
array.forEach((item) => {
  proxyObj[item] = {
    target: 'http://10.1.114.25:9300/',
    // target: 'http://kf7.7moor.com',
    // target: 'http://10.1.114.20:9100',
    // target: 'http://ykf.7moor.com/',
    // target: 'http://58.87.118.20:9300',
    // target: 'http://140.143.60.140:9700',
    ws: false,
    changeOrigin: true
  }
})

module.exports = {
  publicPath: '/',
  // 输出文件目录
  outputDir: 'dist',
  // eslint-loader 是否在保存的时候检查, lint 错误在开发时直接显示在浏览器中
  lintOnSave: process.env.NODE_ENV !== 'production',
  // 生产环境是否生成 sourceMap 文件
  productionSourceMap: false,
  // css相关配置
  css: {
    // 是否使用css分离插件 ExtractTextPlugin
    extract: process.env.NODE_ENV === 'production',
    // 开启 CSS source maps?
    sourceMap: false,
    // css预设器配置项
    loaderOptions: {},
    // 启用 CSS modules for all css / pre-processor files.
    modules: false
  },
  parallel: require('os').cpus().length > 1,
  pwa: {},
  pages: {
    index: {
      entry: process.env.npm_package_config_entry
    }
  },
  devServer: {
    hot: true,
    open: true,
    proxy: proxyObj
  },
  chainWebpack: config => {
    // 移除 prefetch 插件
    config.plugins.delete('prefetch-index')
    if (process.env.NODE_ENV === 'production') {
      dllReference(config)
      // config.plugin('copy')
      //   .tap(args => {
      //     args[0][0].from = path.join(__dirname, 'static')
      //     args[0][0].to = path.join(__dirname, 'dist', 'static')
      //     return args
      //   })
    }
    // 修复HMR
    config.resolve.symlinks(true)
    config.resolve.alias
      .set('@', resolve('src'))
      .set('src', resolve('src'))
      .set('@utils', resolve('src/utils'))
      .set('@assets', resolve('src/assets'))
      .set('@modules', resolve('src/store/modules'))
      .set('@components', resolve('src/components'))
      .set('@api', resolve('src/store/api'))
      .set('@plugins', resolve('src/plugins'))
      .set('@minxins', resolve('src/mixins'))
    config.module
      .rule('cur')
      .test(/\.cur$/)
      .use('url')
      .loader('url-loader')
  },
  configureWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      const options = config.optimization.minimizer[0].options
      options.terserOptions.compress.drop_console = true
      const terserPlugin = new TerserPlugin(options)
      config.optimization.minimizer = [terserPlugin]
      if (process.env.VUE_APP_NETWORK !== 'test') {
        console.log('正常buildykf处理sentry')
        config.plugins.push(
          // new SentryWebpackPlugin({
          //   include: './dist',
          //   release: 'version@12.0.2',
          //   urlPrefix: '~/', // 这个参数指定source-map文件的路径，默认服务器根目录，如果路径错误将无法定位map文件
          //   ignoreFile: '.sentrycliignore',
          //   ignore: ['node_modules', 'webpack.config.js'],
          //   configFile: 'sentry.properties'
          // })
        )
      }
      // config.optimization.splitChunks.chunks = 'all'
    }
  },
  pluginOptions: {
    'style-resources-loader': {
      preProcessor: 'stylus',
      patterns: [
        path.resolve(__dirname, 'src/assets/styles/variables.styl')
      ]
    }
  }
}
